package com.other;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;

public class TxtToExcelConverter {

    /**
     * 将指定目录下的所有TXT文件内容导出到Excel
     * A列和C列存放文件名（不含后缀），B列存放TXT文件内容
     *
     * @param txtDirectoryPath TXT文件所在目录路径
     * @param excelFilePath    生成的Excel文件路径
     * @throws IOException 当文件操作发生错误时抛出
     */
    public static void convertTxtToExcel(String txtDirectoryPath, String excelFilePath) throws IOException {
        // 创建工作簿
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("TXT内容");

        // 获取目录下所有TXT文件
        List<File> txtFiles = getTxtFilesInDirectory(txtDirectoryPath);

        int rowIndex = 0;

        // 遍历所有TXT文件
        for (File txtFile : txtFiles) {
            Row row = sheet.createRow(rowIndex++);

            // 获取文件名（不含后缀）
            String fileName = getFileNameWithoutExtension(txtFile.getName());

            // 读取TXT文件内容
            String fileContent = readTxtFileContent(txtFile);

            // A列：文件名
            Cell cellA = row.createCell(0);
            cellA.setCellValue(fileName);

            // B列：文件内容
            Cell cellB = row.createCell(1);
            cellB.setCellValue(fileContent);

            // C列：文件名
            Cell cellC = row.createCell(2);
            cellC.setCellValue(fileName);
        }

        // 自动调整列宽
        for (int i = 0; i < 3; i++) {
            sheet.autoSizeColumn(i);
        }

        // 写入Excel文件
        try (FileOutputStream outputStream = new FileOutputStream(excelFilePath)) {
            workbook.write(outputStream);
        }

        // 关闭工作簿
        workbook.close();
    }

    /**
     * 获取目录下所有TXT文件
     */
    private static List<File> getTxtFilesInDirectory(String directoryPath) throws IOException {
        Path path = Paths.get(directoryPath);

        if (!Files.isDirectory(path)) {
            throw new IllegalArgumentException("指定路径不是一个目录: " + directoryPath);
        }

        return Files.list(path)
                .filter(Files::isRegularFile)
                .filter(p -> p.getFileName().toString().toLowerCase().endsWith(".txt"))
                .map(Path::toFile)
                .collect(Collectors.toList());
    }

    /**
     * 获取不含扩展名的文件名
     */
    private static String getFileNameWithoutExtension(String fileName) {
        int lastDotIndex = fileName.lastIndexOf('.');
        if (lastDotIndex > 0) {
            return fileName.substring(0, lastDotIndex);
        }
        return fileName;
    }

    /**
     * 读取TXT文件内容
     */
    private static String readTxtFileContent(File file) throws IOException {
        return Files.readAllLines(file.toPath(), StandardCharsets.UTF_8)
                .stream()
                .collect(Collectors.joining("\n"));
    }

    // 使用示例
    public static void main(String[] args) {
        String txtDirectory = "C:\\Users\\Kulumi\\Downloads\\sdt";
        String excelFile = "C:\\Users\\Kulumi\\Downloads\\sdt\\txt_contents.xlsx";

        try {
            convertTxtToExcel(txtDirectory, excelFile);
            System.out.println("Excel文件生成成功: " + excelFile);
        } catch (IOException e) {
            System.err.println("处理过程中发生错误: " + e.getMessage());
            e.printStackTrace();
        }
    }
}
